`:top
`!Open Programming Language`! (`!OPL`!) is a `F33f`_`[programming language`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=Programming_language]`_`f for `F33f`_`[embedded systems`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=Embedded_system]`_`f and `F33f`_`[mobile devices`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=Mobile_device]`_`f that run the `F33f`_`[operating systems`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=Operating_system]`_`f `F33f`_`[EPOC`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=EPOC_(operating_system)]`_`f and `F33f`_`[Symbian`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=Symbian]`_`f. It was released by the British company `F33f`_`[Psion`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=Psion_(company)]`_`f in 1984.
>>Contents
• `F0af`_`[Use`#use]`_`f
• `F0af`_`[History`#history]`_`f
• `F0af`_`[Examples`#examples]`_`f
• `F0af`_`[Testing dialog responses`#testing-dialog-responses]`_`f
• `F0af`_`[Variable types`#variable-types]`_`f
• `F0af`_`[Minutiae`#minutiae]`_`f
• `F0af`_`[See also`#see-also]`_`f
• `F0af`_`[References`#references]`_`f
• `F0af`_`[External links`#external-links]`_`f
-─
>>Use
Originally designed for use on their classic `F33f`_`[Psion`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=Psion_(company)]`_`f PDAs such as the `F33f`_`[Series 3`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=Psion_Series_3]`_`f, `F33f`_`[5/5mx`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=Psion_Series_5]`_`f, `F33f`_`[Series 7`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=Psion_Series_7]`_`f, and `F33f`_`[netBook`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=Psion_netBook]`_`f–netPad, and the Psion produced `F33f`_`[MC218`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=Ericsson_MC218]`_`f, OPL was provided as part of the standard application suite. It can also be installed on the `F33f`_`[Nokia`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=Nokia]`_`f 9200, `F33f`_`[9300`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=Nokia_9300]`_`f and `F33f`_`[9500`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=Nokia_9500]`_`f Communicator series `F33f`_`[mobile telephone`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=Mobile_telephone]`_`f and `F33f`_`[personal digital assistant`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=Personal_digital_assistant]`_`f (PDA) and the `F33f`_`[Sony Ericsson`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=Sony_Ericsson]`_`f `F33f`_`[P800`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=Sony_Ericsson_P800]`_`f, `F33f`_`[P900`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=Sony_Ericsson_P900]`_`f, `F33f`_`[P910`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=Sony_Ericsson_P910]`_`f series. OPL is also included in Psion Teklogix industrial handhelds such as the Workabout mx, and it also appeared in the lesser known Oregon 'Osaris' organiser, a broadly compatible EPOC32 device that uniquely used version 4 of the OS. OPL is an `F33f`_`[interpreted language`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=Interpreted_language]`_`f similar to `F33f`_`[BASIC`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=BASIC]`_`f. A fully `F33f`_`[Visual Basic`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=Visual_Basic]`_`f-compatible language OVAL has also been developed.
>>History
The language was originally named `*Organiser Programming Language`*, developed by `F33f`_`[Psion Ltd`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=Psion_(company)]`_`f for the `F33f`_`[Psion Organiser`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=Psion_Organiser]`_`f. Designed by Colly Myers with the first iteration implemented by Richard Harrison and Martin Stamp. The first implementation (without graphics) was for the original Psion Organiser (now referred to as the Psion Organiser I, 1984), and it came bundled with the Science, Finance and Math `F33f`_`[data packs`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=Data_pack]`_`f. It became truly accessible as built-in software in the `F33f`_`[Psion Organiser II`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=Psion_Organiser_II]`_`f (1986), and the language went on to be used in the `F33f`_`[Psion Series 3`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=Psion_Series_3]`_`f and later. After Psion retired from the `F33f`_`[personal digital assistant`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=Personal_digital_assistant]`_`f market, a project aiming to bring OPL to Symbian came to fruition, when the fledgling Symbian Developer Program released it as `F33f`_`[open-source software`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=Open-source_software]`_`f. The language is now available on `F33f`_`[SourceForge`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=SourceForge]`_`f in a project named `*opl-dev`*.
The language is currently unavailable for Symbian OS v8 and later. With the subsequent retirement of the Symbian OS, it seems unlikely OPL will be made available for later generations of Symbian devices. As of 2010, Nokia device developers were encouraged to use `F33f`_`[Python`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=Python_(programming_language)]`_`f for S60 instead (See `F33f`_`[Python for S60`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=Python_for_S60]`_`f).
>>Examples
Here is the console version of a `F33f`_`["Hello, World!" program`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path="Hello,_World!"_program]`_`f:
`B100`F9d9PROC main:`f`b
`B100`F9d9 PRINT "Hello World!"`f`b
`B100`F9d9 PAUSE 40`f`b
`B100`F9d9ENDP`f`b
`*(Source code taken from the PCDevPrimer in the OPL Wiki.)`*
And here is a GUI version for Nokia's Series 80 user interface:
`B100`F9d9CONST KKeyEnter%=13`f`b
`B100`F9d9`f`b
`B100`F9d9PROC hello:`f`b
`B100`F9d9 dINIT "Hello"`f`b
`B100`F9d9 dTEXT "","Hello World!"`f`b
`B100`F9d9 dBUTTONS "OK",KKeyEnter%`f`b
`B100`F9d9 DIALOG`f`b
`B100`F9d9ENDP`f`b
OPL is a `F33f`_`[structured programming`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=Structured_programming]`_`f language. OPL programs contain PROCedures, which are much like functions (`F33f`_`[subroutines`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=Subroutine]`_`f) in other programming languages.
• The dINIT keyword in this example initializes a dialog box (intuitively enough, all dialog-box related functions begin with a letter 'd'; for clarity, this letter is in lower case, but the language is case independent). The first argument of the dialog is an optional string, which is used for the title of the dialog, displayed in the title bar.
• The dTEXT function displays text, with two compulsory arguments: a left-aligned 'prompt' string, and a main string.
• The dBUTTONS keyword allows you to put buttons on the dialog box - here there is a button with the text "OK". The second argument to each button is both the special notation of the shortcut key for that button and the dialog's return code, in this case the "Enter" key.
• Finally, the DIALOG keyword is required for the previously initialized dialog box to be shown on the screen.
>>>Testing dialog responses
An example:
`B100`F9d9 PROC test:`f`b
`B100`F9d9 dINIT "Your Challenge"`f`b
`B100`F9d9 dTEXT "","Will your answer to this question be no?"`f`b
`B100`F9d9 dBUTTONS "Yes",%y,"No",%n`f`b
`B100`F9d9 IF DIALOG=%y`f`b
`B100`F9d9 PRINT "No it wasn't!"`f`b
`B100`F9d9 ELSE`f`b
`B100`F9d9 PRINT "Yes it was!"`f`b
`B100`F9d9 ENDIF`f`b
`B100`F9d9 GET`f`b
`B100`F9d9 ENDP`f`b
In this cruel interrogative program, the Yes button is assigned the shortcut of Ctrl+y, while No has Ctrl+n, represented by %y and %n respectively. The user's input from the DIALOG is tested in the IF statement, PRINTing appropriate responses to the screen. Note that the 'GET' keyword, which gets user input without using a dialog box, is here used simply to wait for a keypress before terminating the program (otherwise it would end immediately without giving time for the user to read the text). The output from DIALOG can also be stored in a variable.
Variables specific to a procedure must be declared with the LOCAL keyword; global variables are defined with the GLOBAL keyword.
>>>Variable types
The table below uses an example variable named `B100`F9d9var`f`b.
`t
| Data type | Syntax |
|---|---|
| Floating point | var |
| Integer | var% |
| Long integer | var& |
| String | var$( length ) |
`t
>>Minutiae
OPL interfaced with advanced Psion Series 3 features by means of `F33f`_`[operating system`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=Operating_system]`_`f CALLs, but in the later `F33f`_`[Psion Series 5mx`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=Psion_Series_5]`_`f this was changed to a so-called `B100`F9d9OPX`f`b `F33f`_`[library`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=Library_(computing)]`_`f, stored in the system `F33f`_`[read-only memory`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=Read-only_memory]`_`f (ROM), termed the Z drive. 'OPX' libraries were also made available for the `F33f`_`[Nokia 9210`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=Nokia_9210]`_`f, `F33f`_`[Nokia 9300`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=Nokia_9300]`_`f and `F33f`_`[Nokia 9500`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=Nokia_9500]`_`f Communicators, adding OPXs routines for handling Short Message Service (`F33f`_`[SMS`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=SMS]`_`f) and managing `F33f`_`[Bluetooth`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=Bluetooth]`_`f communication.
Other OPL features include those starting with a letter: `B100`F9d9g`f`b for graphical functions, `B100`F9d9m`f`b for menus, and `B100`F9d9d`f`b for dialogs.
>>See also
• `F33f`_`[Psion Organiser`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=Psion_Organiser]`_`f
• `F33f`_`[Symbian`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=Symbian]`_`f
>>References
`:cite-note-1`!1.`! License
>>External links
• The `*opl-dev`* project
• OPL wiki on `F33f`_`[Internet Archive`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=Internet_Archive]`_`f containing documents detailing OPL keywords, OPX interfaces and much other information
• OPL Blog by Symbian, now dead, but old versions are available from the `F33f`_`[Internet Archive`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=Internet_Archive]`_`f
• Russian site about OPL Archived 6 December 2006 at the `F33f`_`[Wayback Machine`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=Wayback_Machine]`_`f
• OPL programming tutorial
`c`F0af`_`[↑ Back to top`#top]`_`f`a